package es.antonio.duarte.abrahamAdmin.struts.actions;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import es.antonio.duarte.abrahamAdmin.model.Diario;
import es.antonio.duarte.abrahamAdmin.servicios.FraseServicio;
import es.antonio.duarte.abrahamAdmin.struts.Constantes;
import es.antonio.duarte.abrahamAdmin.struts.forms.EliminarDiarioForm;
import es.antonio.duarte.abrahamAdmin.servicios.DiarioServicio;

/**
 * Clase encargada de eliminar los diarios basandose en su id.
 */
public class EliminarDiarioAction extends BaseAction {

   /** El servicio de diario a utilizar. */
   private DiarioServicio servicio;

   /** Manejador de trazas. */
   private final Log log = LogFactory.getLog(EliminarDiarioAction.class);

   /**
    * Elimina el diario cuyo id está en el ActionForm. También regenera la
    * lista de diarios mostrados y la almacena en la request bajo el nombre
    * "diariosMostrados" definida en la clase constantes como
    * NOMBRE_VARIABLE_DIARIO<br/> Al terminar devuelve el input forward
    * definido en el action.
    * @param mapping ActionMapping asociado al action
    * @param form ActionForm asocido al action
    * @param request HttpServletRequest asociado al action
    * @param response HttpServletResponse asociado al action
    * @return ActionForward
    * @throws Exception En caso de error en la ejecucion del action
    * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping,
    *      org.apache.struts.action.ActionForm,
    *      javax.servlet.http.HttpServletRequest,
    *      javax.servlet.http.HttpServletResponse)
    */
   @Override
   public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
      logDebug(log, "Accediendo al formulario");
      EliminarDiarioForm formulario = (EliminarDiarioForm) form;
      Diario diarioAEliminar = new Diario();
      Long id = formulario.getId();
      diarioAEliminar.setId(id);
      logDebug(log, "Eliminando diario con id " + id);
      servicio.eliminar(diarioAEliminar);
      logDebug(log, "Refrescando lista de diarios");
      request.setAttribute(Constantes.NOMBRE_VARIABLE_DIARIO, servicio
               .consultar());
      logDebug(log, "Devolviendo input forward");
      return mapping.getInputForward();
   }

   /**
    * Obtiene el valor de servicio.
    * @return Valor de servicio
    */
   public DiarioServicio getServicio() {
      return servicio;
   }

   /**
    * Asigna el valor de servicio.
    * @param servicio Valor a asignar
    */
   public void setServicio(final DiarioServicio servicio) {
      this.servicio = servicio;
   }
}
